Laboratorio 2011-02
Esercizio 01
Realizzare in OS/161 un programma concorrente in linguaggio C che, utilizzando i thread, manipoli delle stringhe di caratteri, con le seguenti specifiche.
Il thread principale attiva due thread ulteriori (denominati sender e receiver) e si mette in attesa che entrambi terminino.
Il thread sender procede con costrutto iterativo all'interno del quale:
· legge una stringa da standard input (tastiera)
· segnala al receiver che la stringa è stata letta e aspetta che questo la manipoli
· quando il receiver ha manipolato la stringa e sveglia il sender, quest'ultimo visualizza la stringa su standard output (video)
Il thread receiver include un costrutto iterativo all'interno del quale:
I cicli di lettura/visualizzazione e di conversione in maiuscolo terminano non appena viene introdotta la stringa “end”.
Il thread principale visualizzi il numero di stringhe processate prima di terminare definitivamente.
Suggerimenti
/home/pso/os161/os161-base-1.99.05/kern/test
un file tt4.c contenente la funzionalità richiesta (funzione di test numero 4, threadtest4)
Esercizio 02
Si scriva in OS/161 un programma che sia in grado di ordinare un vettore di n+1 elementi utilizzando n thread identici.
Ogni thread è responsabile di due elementi adiacenti (il thread 0 si occupa degli elementi 0 e 1, il thread 1 degli elementi 1 e 2, ..., il thread n-1 degli elementi n-1 e n).
Ciascun thread confronta i due elementi di cui si occupa e li scambia se non si trovano nell'ordine corretto.
Una volta terminato il proprio lavoro tutti i thread si sincronizzano con un thread specifico che termina l'intero processo se tutti gli elementi sono ordinati correttamente oppure esegue nuovamente tutti i thread per proseguire nella fase di ordinamento.